/*
    题目背景
战争已经进入到紧要时间。你是运输小队长，正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激，于是命令你的士兵们到前方的一座独木桥上欣赏风景，而你留在桥下欣赏士兵们。
士兵们十分愤怒，因为这座独木桥十分狭窄，只能容纳 1个人通过。假如有 2 个人相向而行在桥上相遇，那么他们 2 个人将无法绕过对方，只能有 1个人回头下桥，让另一个人先通过。但是，可以有多个人同时呆在同一个位置。

题目描述
突然，你收到从指挥部发来的信息，敌军的轰炸机正朝着你所在的独木桥飞来！为了安全，你的部队必须撤下独木桥。独木桥的长度为 L，士兵们只能呆在坐标为整数的地方。所有士兵的速度都为 1，但一个士兵某一时刻来到了坐标为 0 或 L+1 的位置，他就离开了独木桥。

每个士兵都有一个初始面对的方向，他们会以匀速朝着这个方向行走，中途不会自己改变方向。但是，如果两个士兵面对面相遇，他们无法彼此通过对方，于是就分别转身，继续行走。转身不需要任何的时间。

由于先前的愤怒，你已不能控制你的士兵。甚至，你连每个士兵初始面对的方向都不知道。因此，你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外，总部也在安排阻拦敌人的进攻，因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。

输入格式
第一行：一个整数 L，表示独木桥的长度。桥上的坐标为 1⋯L。

第二行：一个整数 N，表示初始时留在桥上的士兵数目。

第三行：有 N个整数，分别表示每个士兵的初始坐标。

输出格式
只有一行，输出 2 个整数，分别表示部队撤离独木桥的最小时间和最大时间。2 个整数由一个空格符分开。

输入输出样例
输入 
4
2
1 3
输出 
2 4
*/

#include<bits/stdc++.h>
using namespace std;
int main(){
    int l,n,maxv=0,minv=0;
    cin>>l>>n;
    int p;
    if(!n){
        cout<<"0 0"<<endl;
        return 0;
    }
    for(int i=0;i<n;i++){
        cin>>p;
        minv=max(minv,min(l-p+1,p));
        maxv=max(maxv,max(l-p+1,p));
    }
    cout<<minv<<' '<<maxv<<endl;
    return 0;
}

/*
    那么当两个士兵撞在一起时，从你的视角看会发生什么？当然他们认为他们都掉头了，但因为你在特高的地方，你会认为他们“穿过”了对方。
    换言之，这与他们相互穿过并没有任何区别。
    那么我们就可以把所有士兵分开。首先，我们把他们一个个读进去。然后，对于每一个士兵，他有向左和向右两种选择。
    设士兵在位置p，如果向左，需要p时间单位；向右，需要L-p+1个。分别取max和min，
*/